package task;

import app.FileMeta;
import callBack.FileScannerCallBack;
import lombok.Getter;

import java.io.File;
import java.sql.Date;
import java.util.ArrayList;
import java.util.List;

/**
 * 进行文件扫描任务
 */
@Getter
public class FileScanner {
    //当前扫描的文件个数
    private int fileNum;
    //当前扫描的文件夹个数
    //最开始的根文件夹记录扫描，所以初始值设置为1
    private int dirNum=1;
//    //扫描的所有文件信息
//    List<FileMeta> fileMetas=new ArrayList<>();
    //文件扫描回调对象
    private FileScannerCallBack callBack;

    public FileScanner(FileScannerCallBack callBack){
        this.callBack=callBack;
    }

    /**
     * 根据字符串的文件夹进行扫描任务，对选中的文件夹进行递归扫描
     * @param filePath  要扫描的文件夹
     */
    public void scan(File filePath){
        //递归扫描的终止条件
        if (filePath==null){
            return;
        }
        //使用回调函数将当前目录下的所有内容都保存到指定终端
        this.callBack.callback(filePath);
        //先将当前这一集目录下的file对象获取
        File[] files=filePath.listFiles();
        //遍历这些file对象，根据是否为文件夹进行区别处理
        for (File file:files){
            FileMeta meta=new FileMeta();
            if (file.isDirectory()){
//                //此处说明是文件夹，就需要继续递归扫描
//                setCommonFiled(file.getName(),file.getPath(),true,file.lastModified(),meta);
//                //将当前文件夹信息保存到List集合中
//                fileMetas.add(meta);
                dirNum++;
                scan(file);
            }else {
//                //此处说明是文件，就直接保存
//                setCommonFiled(file.getName(),file.getPath(),false,file.lastModified(),meta);
//                //文件有大小，file.length()默认以字节为单位，B，长整型
//                meta.setSize(file.length());
//                fileMetas.add(meta);
                fileNum++;
            }
        }
    }
}
